﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Entity;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ThaiHoa.Win.QLSX.Entity;
using ThaiHoa.Win.QLSX.Kho.UTI;
using ThaiHoa.Win.QLSX.DAL;

namespace ThaiHoa.Win.QLSX.Kho.UI
{
    public partial class frmCongNhanDetail : Form
    {
        #region Fields
        private KhoDBContext db;
        private BindingSource CongNhanBS;
        public Guid Id;
        Access acs;
        public event EventHandler DBChanged;
        #endregion
        #region Constructor
        public frmCongNhanDetail()
        {
            InitializeComponent();
        }
        #endregion
        #region Functions
        private void KhoiTao()
        {
            acs = new Access();
            db = new KhoDBContext();
            CongNhanBS = new BindingSource();
            db.CongNhan.Include("LoaiCongNhan").Include("DoiSanXuat").Where(m => m.TrangThai).Load();
            CongNhanBS.DataSource = db.CongNhan.Local.ToBindingList();
            //Binding cho binding navigator
            //Binding cho combo
            //combo đội sản xuất
            List<DoiSanXuat> listDoiSanXuat;
            listDoiSanXuat = db.DoiSanXuat.Where(d => d.TrangThai).ToList();
            cbDoi.DataSource = listDoiSanXuat;
            cbDoi.DataBindings.Add("SelectedItem", CongNhanBS, "DoiSanXuat", true);
            //combo loại công nhân
            List<LoaiCongNhan> listLoaiCongNhan;
            listLoaiCongNhan = db.LoaiCongNhan.Where(l => l.TrangThai).ToList();
            cbChucVu.DataSource = listLoaiCongNhan;//set datasource cho combo
            cbChucVu.DataBindings.Add("SelectedItem", CongNhanBS, "LoaiCongNhan", true);//binding
            //Binding cho textbox
            txtHoVaTen.DataBindings.Add("Text", CongNhanBS, "HoVaTen");
            txtDiaChi.DataBindings.Add("Text", CongNhanBS, "DiaChi");
            txtDienThoai.DataBindings.Add("Text", CongNhanBS, "DienThoai");
            txtGhiChu.DataBindings.Add("Text", CongNhanBS, "GhiChu");
            //binding cho datetimepicker
            dtNgaySinh.DataBindings.Add("Value", CongNhanBS, "NgaySinh");
            //binding cho checkbox
            chkDoiTruong.DataBindings.Add("Checked", CongNhanBS, "DoiTruong");
            ////binding cho radiobutton
            //rbNam.DataBindings.Add("Checked", CongNhanBS, "GioiTinh");
            //binding cho checkbox
            chkNam.DataBindings.Add("Checked", CongNhanBS, "GioiTinh");
            //Xử lý 2 trường hợp cụ thế :
            //Thêm mới và xem chi tiết
            if (Id != Guid.Empty)// Truong hop xem chi tiet
            {
                //Tìm vị trí của object có Id tương ứng
                int pos = -1;
                //pos = CongNhanBS.Find("MaMatHang","dfi");
                CongNhan item = db.CongNhan.FirstOrDefault(m => m.Id.Equals(Id));
                if (item == null) return;
                pos = CongNhanBS.List.IndexOf(item);
                if (pos < 0)
                    return;
                CongNhanBS.Position = pos;
                this.Text = txtHoVaTen.Text;
            }
            else // Truong hop them moi
            {
                CongNhanBS.AddNew();
                this.Text = "New Item";
            }
        }
        /// <summary>
        /// Kiểm tra hợp lệ dữ liệu
        /// True: hợp lệ
        /// False :chưa hợp lệ
        /// </summary>
        /// <returns></returns>
        private bool KiemTraHopLeDuLieu()
        {
            bool result = true;
            errP.Clear();
            //Kiểm tra loại máy móc
            if (cbChucVu.SelectedItem == null)
            {
                errP.SetError(cbChucVu, "Loại máy không được rỗng");
                result = false;
            }
            
            if (txtHoVaTen.Text == "")
            {
                errP.SetError(txtHoVaTen, "Tên không được rỗng");
                result = false;
            }
            return result;
        }
        private int LuuLai()
        {
            CongNhanBS.EndEdit();
            if (!KiemTraHopLeDuLieu()) return -1;
            if (MessageBox.Show("Lưu thay đổi ?", "Lưu Lại", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
            {
                int result = db.SaveChanges();
                if (DBChanged != null)
                {
                    DBChanged(this, EventArgs.Empty);
                }
                return result;
            }
            else
                return 0;
        }
        private void Cancel()
        {
            if (MessageBox.Show("Hủy thay đổi ?", "Lưu Lại", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
            {
                CongNhanBS.CancelEdit();
                CongNhanBS.ResetCurrentItem();
            }
        }
        private void Xoa()
        {
            if (Id == Guid.Empty)
            {
                this.Close();
                return;
            }
            if (Common.ShowMessengerConfirmDelete() == DialogResult.Yes)
            {
                CongNhanBS.RemoveCurrent();
                db.SaveChanges();
                {
                    DBChanged(this, EventArgs.Empty);
                }
                this.Close();
            }
        }
        #endregion


        #region Events
        private void frmCongNhanDetail_Load(object sender, EventArgs e)
        {
            KhoiTao();
        }
        private void btnSave_Click(object sender, EventArgs e)
        {
            int result = LuuLai();
            if (result >= 0) this.Close();
        }
        private void btnQuit_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        private void btnCancel_Click(object sender, EventArgs e)
        {
            Cancel();
        }
        private void txtTen_TextChanged(object sender, EventArgs e)
        {
            this.Text = txtHoVaTen.Text;
        }
        private void btnAddNew_Click(object sender, EventArgs e)
        {
            acs.ShowFormCongNhanDetail(Guid.Empty);
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            Xoa();
        }
        private void chkNam_CheckedChanged(object sender, EventArgs e)
        {
            chkNu.Checked = !chkNam.Checked;
        }
        private void chkNu_CheckedChanged(object sender, EventArgs e)
        {
            if (chkNam.Checked == chkNu.Checked)
            {
                chkNam.Checked = !chkNu.Checked;
            }
        }
        #endregion

    }
}
